java 中,"=="和 "equals"的区别

来源:百度知道 编辑:UC知道 时间:2024/06/02 02:36:02

给你个例子,研究一下
例1:
String tt=new String("tt");
String tt1=new String("tt");
System.out.println(tt==tt1);
System.out.println(tt.equals(tt1));
结果:
false
true
分析:equals是比较值,==是比较地址 ,tt和tt1值相同但是地址不同。
例2:
String tt2="tt";
String ="tt";
System.out.println(tt2==tt3);
System.out.println(tt2.equals(tt3));
结果:
true
true
分析:tt2 tt3指向同一个"tt",同一个"tt"的值和地址当然都相同了。

简单的说吧==比较的是两个对象的栈的数据。而equals比较的是堆中的数据。
比如:int a=1;int b=2;判断a==b就为假因为a存在栈中的数据为1,b存在栈中的数据为2。不相等。
若是引用类型对象比较,就是比较他们的存在堆中的引用地址是否相同。
如:Object ob1=new Object(); Object ob2=ob1;这时equals比较两个对象就是相同的。注意:ob2=ob1。所以引用同一个地址。
而 Object ob3=new Object(); obj1.equals(obj3)就为假。因为开辟了另一个新空间。

==是运算符,用于比较两个引用是否指向同个对象,也就是楼上各位说的比较地址
equals只是个函数,结果依赖于他的实现,你完全可能重载equals,直接返回==的结果使equals也用来比较地址.只不过习惯上都用equals来实现逻辑上的等价关系

equals是比较值,==是比较地址
Object中有equa